 /*************************************************
 * 描述：复选控件
 *
 * File：cximuticomb.h
 * Author：zhangzhiming@mozihealthcare.cn
 * Date：25-9-3
 * Update：
 * ************************************************/
#ifndef CXIMUTICOMB_H
#define CXIMUTICOMB_H
#include <QComboBox>
#include <controls/export.h>
class QListWidgetItem;
class CXiMutiCombPrivate;


struct CXI_CONTROLS_EXPORT MutiItem
{
	QString  display = QString{};	// 显示文本
	QVariant data	 = QVariant{};	// 绑定数据
	QVariant tag	 = QVariant{};	// 存储位

	MutiItem() = default;

	MutiItem(const MutiItem&) = default;

	MutiItem(const QString& display,
			const QVariant& data,
			const QVariant& tag);

};
Q_DECLARE_METATYPE(MutiItem)

class CXI_CONTROLS_EXPORT CXiMutiComb : public QWidget
{
	Q_OBJECT
	Q_PROPERTY(QString separator READ separator WRITE setSeparator)
public:
	explicit CXiMutiComb(QWidget* parent = nullptr);
	~CXiMutiComb();

	/**
	 * 添加项
	 * @param display  显示文本
	 * @param data 绑定数据
	 * @param tag 存储位
	 */
	void addItem(const QString& display,
		const QVariant& data = {},
		const QVariant& tag= {});

	/**
	 * 添加项
	 * @param item
	 */
	void addItem(const MutiItem& item);

	/**
	 * 批量添加项
	 * @param items 项列表
	 */
	void addItems(const QList<MutiItem>& items);

	/**
	 * 选中的显示文本
	 * @return
	 */
	QString selectedDisplay() const;

	/**
	 * 获取选中数据
	 * @return
	 */
	QList<QVariant> selectedData() const;


	QList<QVariant> selectedTag() const;


	QList<MutiItem> selectedItems() const;
	/**
	 * 获取分隔符
	 * @return
	 */
	QString separator() const;

	/**
	 * 设置分隔符
	 * @param separator
	 */
	void setSeparator(const QString& separator);

protected slots:
	virtual void popup();
private slots:
	void stateChanged();
signals:
	void selectChanged();
private slots:
	void checkStateChanged(QListWidgetItem *item);
private:
	/**
	 * 禁用上层接口
	 */

	Q_DECLARE_PRIVATE(CXiMutiComb)
	QScopedPointer<CXiMutiCombPrivate> d_ptr;
};


#endif//CXIMUTICOMB_H
